package top.younote.learn.sort;

import java.io.IOException;

/**
 * @Description: 冒泡排序
 * @Author: duanyu
 * @CreateTime: 2020-08-22 20:09
 **/
public class Bubble {
    public static void main(String[] args) throws IOException {
        int[] sortNums = CommonUtils.readSortNums();
//        int[] sortedNums = bubble(sortNums);
        int[] sortedNums = bubbleOptimize(sortNums);
        for (int i = 0; i < sortNums.length; i++) {
            System.out.println(sortedNums[i]);
        }
    }

    /**
     * 每次找到最大或者最小那个数，放到正确的位置
     * @param sortNumsList
     * @return
     */
    private static int[] bubble(int[] sortNumsList) {
        int len = sortNumsList.length;
        for (int i = 0; i < len - 1; i++) {
            for (int j = i + 1; j < len; j++) {
                if (sortNumsList[i] > sortNumsList[j]) {
                    int tmp = sortNumsList[i];
                    sortNumsList[i] = sortNumsList[j];
                    sortNumsList[j] = tmp;
                }
            }
        }
        return sortNumsList;
    }

    /**
     * 当已经是有序的时候不再进行比较，直接终止
     * @param sortNumsList
     * @return
     */
    private static int[] bubbleOptimize(int[] sortNumsList) {
        int len = sortNumsList.length;
        boolean flag = true;
        for (int i = 0; i < len - 1 && flag; i++) {
            flag = false;
            for (int j = i + 1; j < len; j++) {
                if (sortNumsList[i] > sortNumsList[j]) {
                    int tmp = sortNumsList[i];
                    sortNumsList[i] = sortNumsList[j];
                    sortNumsList[j] = tmp;
                    flag = true;
                }
            }
        }
        return sortNumsList;
    }
}
